package CutLoad.mc
{
	import CutLoad.cookies.Painter;
	
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;

	public class McMouseOverLoopPlayOutStop
	{
		private var target:MovieClip;
		private var isOver:Boolean=false;
		private var loopStartFrame:Number,loopEndFrame:Number;
		private var _select:Boolean=false;
		/**
		 * 一次生成很多McMouseOverLoopPlayOutStop实例，并放到数组里
		 * @param spParen 需要包装的所有影片的父影片
		 * @param loopStartFrame 需要包装的所有影片的循环播放的开始处  注：实际就是McMouseOverLoopPlayOutStop初始化里的参数loopStartFrame
		 * @param loopEndFrame 需要包装的所有影片的循环播放的结束处，注意，结束后边的动画为恢复状态的动画  注：实际就是McMouseOverLoopPlayOutStop初始化里的参数loopEndFrame
		 * @param count  需要包装的影片的数量
		 * @param mcPrefix  需要包装的所有影片的名称前缀:例如：mc1,mc2,mc3... 名称为mc
		 * @param starIndex 开始的索引:默认认为1
		 * @return 
		 * 
		 */		
		public static function createSomeMcMouseOverLoopPlayOutStop(spParen:Sprite,loopStartFrame:Number,loopEndFrame:Number,count:Number,mcPrefix:String="mc",starIndex:Number=1,isAddMouseRect:Boolean=false):Array{
			var arr:Array=new Array();
			for(var i:Number=starIndex;i<=count;i++){
				if(isAddMouseRect) addChildeRectAlpha(spParen[mcPrefix+i]);
				var btnTem:McMouseOverLoopPlayOutStop=new McMouseOverLoopPlayOutStop(spParen[mcPrefix+i],loopStartFrame,loopEndFrame);
				arr.push(btnTem);
			}
			return arr;
		}
		/**
		 * 给一个可视对象内容加一个和它宽高一样的，透明方块。主要是用于鼠标触摸范围  
		 * @param target 可视对象
		 * @param ww 宽 默认为0 时为：target.width;
		 * @param hh 高 默认为0 时为：target.height;
		 * @return 可视对象
		 * 
		 */		
		public static function addChildeRectAlpha(target:MovieClip,ww:Number=0,hh:Number=0):MovieClip{
			if(ww==0) ww=target.width;
			if(hh==0) hh=target.height;
			var rectTem:Sprite=Painter.getAlphaRect(ww,hh);
			target.addChild(rectTem);
			return target;
		}
		/**
		 * 把一个电影符号，包装一个具有鼠标事件的动态动画：当 鼠标放上去时循环播放一段动画，如果离开。再播放恢复状态的动画。注：默认不写后两个参数，只是循环播放动画
		 * @param target
		 * @param loopStartFrame 循环播放的开始处
		 * @param loopEndFrame 循环播放的结束处，注意，结束后边的动画为恢复状态的动画
		 * @param isGoToAndStop1 是否开始的时候停在第一帧。
		 * 
		 */		
		public function McMouseOverLoopPlayOutStop(target:MovieClip,loopStartFrame:Number=0,loopEndFrame:Number=0,isGoToAndStop1:Boolean=true)
		{
			this.loopStartFrame=loopStartFrame;
			this.loopEndFrame=loopEndFrame;
			this.target=target;
			target.mouseChildren=false;
			target.buttonMode=true;
			target.addEventListener(MouseEvent.MOUSE_OVER,over);
			target.addEventListener(MouseEvent.MOUSE_OUT,out);
			target.addEventListener(Event.ENTER_FRAME,enter_frame);
			this.select=false;
			if(isGoToAndStop1) target.gotoAndStop(1);
		}
		public function getTarget():MovieClip{
			return target;
			
		}
		public function set select(isOk:Boolean):void{
			_select=isOk;
			if(_select){
				over(null)
			}else{
				out(null);
			}
		}
		public function get select():Boolean{
			return _select;
		}
		private function over(e:MouseEvent):void{
			this.isOver=true;
		}
		private function out(e:MouseEvent):void{
			if(_select) return;
			this.isOver=false;
		}
		private function enter_frame(e:Event):void{
			/*if(target.name=="mcbtn"){
				trace("isOver:"+isOver+" this.target.currentFrame:"+this.target.currentFrame)
				trace("loopStartFrame:"+loopStartFrame+" "+loopEndFrame);	
			}*/
			//
			//
			if(loopStartFrame==0||loopEndFrame==0){
				if(this.target.currentFrame==1){
					if(this.isOver){
						target.play();
					}else{
						target.stop();
					}
				}
			}else{
				if(this.isOver){
					target.play();
					if(this.target.currentFrame>=loopEndFrame){
					//if(this.target.currentFrame==loopEndFrame){
						this.target.gotoAndPlay(loopStartFrame);
					}
				}else{
					if(this.target.currentFrame==1){
						target.stop();
					}
					return;
				}
			}
			
		}
	}
}